From: Emmanuele Bassi Date: Mon, 8 Nov 2021 10:14:48 +0000 (+0000) Subject: Unrealize ATContext on unroot X-Git-Tag: archive/raspbian/4.6.5+ds-1+rpi1~1^2~91^2^2~118^2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=018388d32116b2600ecdf9a7bd5cbbb6873b8818;p=gtk4.git Unrealize ATContext on unroot Non-root widgets should unrealize their ATContext, if they have one, when they are unrooted, as they don't have a connection to a top level any more. Fixes: #4421 --- diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 907e2004f2..b0921818a8 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -2441,6 +2441,18 @@ gtk_widget_root_at_context (GtkWidget *self) gtk_at_context_set_display (priv->at_context, gtk_root_get_display (priv->root)); } +static void +gtk_widget_unroot_at_context (GtkWidget *self) +{ + GtkWidgetPrivate *priv = gtk_widget_get_instance_private (self); + + if (priv->at_context != NULL) + { + gtk_at_context_set_display (priv->at_context, gdk_display_get_default ()); + gtk_at_context_unrealize (priv->at_context); + } +} + void gtk_widget_realize_at_context (GtkWidget *self) { @@ -2532,6 +2544,9 @@ gtk_widget_unroot (GtkWidget *widget) if (!GTK_IS_ROOT (widget)) { + /* Roots unrealize the ATContext on unmap */ + gtk_widget_unroot_at_context (widget); + priv->root = NULL; g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_ROOT]); }